给定一个字符串,求该字符串含有的本质不同的子串数量。$(|S|\le 2·10^4)$
题解
每个子串都是原字符串后缀的前缀,考虑任意一个后缀${\rm suffix}(i)$,对子串的贡献为$len-i+1$。在后缀数组中${\rm height}(i)$表示排名第i小和第i-1小的后缀的最长公共前缀,其产生的贡献即为${\rm height}(i)$,减去这部分即可。
代码
1 |
|
Success and failure are temporary.
给定一个字符串,求该字符串含有的本质不同的子串数量。$(|S|\le 2·10^4)$
每个子串都是原字符串后缀的前缀,考虑任意一个后缀${\rm suffix}(i)$,对子串的贡献为$len-i+1$。在后缀数组中${\rm height}(i)$表示排名第i小和第i-1小的后缀的最长公共前缀,其产生的贡献即为${\rm height}(i)$,减去这部分即可。
1 | #include<bits/stdc++.h> |